export default {
    namespaced: true,//命名空间
    state: {
        name: "购物车Cart",
        carts: []
    },
    mutations: {
        SET_CARTS(state, productItem) {
            // console.log(productItem)
            //如果购物车中carts数组中没有这条数据,那么就要添加
            //用productItem的id去carts中查找,如果能查找到说明有,查找不到说明没有
            let isExistsProductItem = state.carts.find(item => item.id === productItem.id)

            if (!isExistsProductItem) {
                //如果不存在
                //创建一条数据 有id count数量 price价格 title名称
                let item = {
                    id: productItem.id,
                    price: productItem.price,
                    title: productItem.title,
                    count: 1
                }
                //再把这条数据添加到carts中
                state.carts.push(item)
            } else {
                //如果有这条数据,就要让数据的数量count+1
                isExistsProductItem.count++
            }

        }
    },
    actions: {
        //专门处理购物车的数据
        HANDLER_CART(context, payload) {
            // console.log(payload)
            //payload其实就是对应的Product store中的product状态中某条数据的id
            let product_id = payload;
            //让Product中的products中某条数据的库存-1

            //先获取模块化Product中prouducts数据
            // console.log(context)
            let products = context.rootState.Product.products;
            // console.log(products)
            //触发Product模块中的mutation DECREMENT_INVENTORY
            // root:true的意思是 直接触发根store中 命名空间中的mutation
            //⭐️这里触发的是模块化的Product中的mutation
            context.commit('Product/DECREMENT_INVENTORY', product_id, { root: true })

            //根据传入的id找到products中对应的数据,提交给mutation SET_CARTS
            let targetProductItem = products.find(item => item.id === product_id)
            //触发的是当前模块的mutation
            context.commit("SET_CARTS", targetProductItem)
        }
    },
    getters: {
        total(state) {
            return state.carts.reduce((total, item) => {
                return total += item.price * item.count
            }, 0)
        }
    },
    modules: {}
}